const express = require('express');
const router = express.Router();
const authenticateToken = require('../middleware/auth');

// 创建订单
router.post('/create', authenticateToken, (req, res) => {
  const userId = req.user.userId;
  const { items, couponId, originalAmount, discountAmount, finalAmount } = req.body;

  if (!items || items.length === 0) {
    return res.status(400).json({ message: '订单商品不能为空' });
  }

  // 开始事务
  global.db.beginTransaction((err) => {
    if (err) {
      console.error('开始事务失败:', err);
      return res.status(500).json({ message: '系统错误' });
    }

    // 生成订单号
    const orderNo = 'ORD' + Date.now() + Math.floor(Math.random() * 1000);

    // 插入订单
    const insertOrderQuery = `
      INSERT INTO orders (
        user_id, order_no, original_amount, discount_amount, 
        final_amount, coupon_id, status
      ) VALUES (?, ?, ?, ?, ?, ?, 'PENDING')
    `;

    global.db.query(insertOrderQuery, [
      userId, orderNo, originalAmount, discountAmount, 
      finalAmount, couponId || null
    ], (err, orderResult) => {
      if (err) {
        return global.db.rollback(() => {
          console.error('创建订单失败:', err);
          res.status(500).json({ message: '创建订单失败' });
        });
      }

      const orderId = orderResult.insertId;

      // 插入订单商品
      const insertItemsQuery = `
        INSERT INTO order_items (order_id, product_name, price, quantity) 
        VALUES ?
      `;

      const itemsData = items.map(item => [
        orderId,
        item.name,
        parseFloat(item.price.replace('¥', '')),
        item.count
      ]);

      global.db.query(insertItemsQuery, [itemsData], (err) => {
        if (err) {
          return global.db.rollback(() => {
            console.error('插入订单商品失败:', err);
            res.status(500).json({ message: '创建订单失败' });
          });
        }

        // 如果使用了优惠券，标记为已使用
        if (couponId) {
          const updateCouponQuery = `
            UPDATE user_coupons 
            SET status = 'USED', used_at = NOW(), order_id = ? 
            WHERE id = ? AND user_id = ? AND status = 'UNUSED'
          `;

          global.db.query(updateCouponQuery, [orderNo, couponId, userId], (err, couponResult) => {
            if (err || couponResult.affectedRows === 0) {
              return global.db.rollback(() => {
                console.error('更新优惠券状态失败:', err);
                res.status(400).json({ message: '优惠券已失效' });
              });
            }

            // 提交事务
            global.db.commit((err) => {
              if (err) {
                return global.db.rollback(() => {
                  console.error('提交事务失败:', err);
                  res.status(500).json({ message: '创建订单失败' });
                });
              }

              res.json({
                message: '订单创建成功',
                orderId: orderId,
                orderNo: orderNo
              });
            });
          });
        } else {
          // 没有使用优惠券，直接提交事务
          global.db.commit((err) => {
            if (err) {
              return global.db.rollback(() => {
                console.error('提交事务失败:', err);
                res.status(500).json({ message: '创建订单失败' });
              });
            }

            res.json({
              message: '订单创建成功',
              orderId: orderId,
              orderNo: orderNo
            });
          });
        }
      });
    });
  });
});

// 获取用户订单列表
router.get('/', authenticateToken, (req, res) => {
  const userId = req.user.userId;
  
  const query = `
    SELECT 
      o.*,
      GROUP_CONCAT(
        CONCAT(oi.product_name, '×', oi.quantity) 
        SEPARATOR '; '
      ) as items
    FROM orders o
    LEFT JOIN order_items oi ON o.id = oi.order_id
    WHERE o.user_id = ?
    GROUP BY o.id
    ORDER BY o.created_at DESC
  `;

  global.db.query(query, [userId], (err, results) => {
    if (err) {
      console.error('获取订单失败:', err);
      return res.status(500).json({ message: '获取订单失败' });
    }

    res.json({
      message: '获取成功',
      orders: results
    });
  });
});

module.exports = router;
